package com.zhentao.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 规则引擎类型枚举
 * @author zhentao
 * @date 2024-12-19
 */
@Getter
@AllArgsConstructor
public enum RuleEngineTypeEnum {
    
    /**
     * Groovy脚本引擎
     */
    GROOVY("GROOVY", "Groovy脚本", "使用Groovy语言编写规则逻辑，功能强大，语法简洁"),
    
    /**
     * JavaScript脚本引擎
     */
    JAVASCRIPT("JAVASCRIPT", "JavaScript脚本", "使用JavaScript语言编写规则逻辑，易于理解"),
    
    /**
     * 正则表达式引擎
     */
    REGEX("REGEX", "正则表达式", "使用正则表达式进行模式匹配和校验"),
    
    /**
     * Spring EL表达式引擎
     */
    SPEL("SPEL", "Spring EL表达式", "使用Spring表达式语言，轻量级，集成度高"),
    
    /**
     * JSON规则引擎
     */
    JSON("JSON", "JSON规则", "使用JSON格式定义规则，结构化，易于维护"),
    
    /**
     * SQL表达式引擎
     */
    SQL("SQL", "SQL表达式", "使用SQL语法进行数据查询和计算"),
    
    /**
     * 自定义Java代码
     */
    CUSTOM("CUSTOM", "自定义代码", "使用Java代码实现复杂的业务逻辑");
    
    private final String code;
    private final String name;
    private final String description;
    
    /**
     * 根据代码获取枚举
     */
    public static RuleEngineTypeEnum getByCode(String code) {
        for (RuleEngineTypeEnum engineType : values()) {
            if (engineType.getCode().equals(code)) {
                return engineType;
            }
        }
        return null;
    }
    
    /**
     * 是否为有效的引擎类型代码
     */
    public static boolean isValidCode(String code) {
        return getByCode(code) != null;
    }
}

